A software build is either the process of converting source code files into one or more software artifacts that can be run on a computing device or the result of doing so. For example, aspects of a software build include compiling source code files into executable code and linking objects together to perform an intended function. An incremental build is a software build where a sub-set of source code files are processed, such as source code files that have had changes made to them since the last build. An incremental build can increase the speed of the build process. A software build process can be slow, and typically just a few of the inputs are changed. Consequently, just a few of the outputs can be updated during an incremental build.
Software developers typically employ a build utility to perform a software build including an incremental software build. A build utility is a software development tool including a set of one or more build tools that can be used to perform a software build. A build tool can be used to manage a specific process of building a computer program and can at times coordinate and control other programs. The build utility manages the set of build tools to compile and link the various files in a particular order.
As software projects evolve and grow, their build system grows with it, often to proportions so large it becomes impractical for developers to keep track of how the build works, causing maintenance issues, deployment problems and slow builds. Build utilities have used either rough approximations for addressing these concerns, which at best provide incomplete solutions, or are designed to address concerns of a specific software build and are not adaptable for general applicability.